package cn.com.kh;

import cn.com.elite.EliteBean;
import net.sf.json.JSONObject;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.*;

public class KHi18nUtil {
    private static final Log log = LogFactory.getLog(KHi18nUtil.class);
    private static Map<String, List<String>> Sysc_I18n = new HashMap<String, List<String>>();

    /**
     * 获取系统多语言
     * @param eliteBean 数据源
     * @param module_ID 模块ID
     * @param i18n_Type 语言ID
     * @param i18n_Key 语言Key
     * @return 翻译结果
     */
    public static String getI18n(EliteBean eliteBean, String module_ID, String i18n_Type, String i18n_Key) {
        String i18n_Value = i18n_Key;
        try {
            // 检查是否已经加载
            JSONObject i18n_Resources = new JSONObject();
            if (Sysc_I18n.containsKey(module_ID) && Long.parseLong(Sysc_I18n.get(module_ID).get(1)) > (System.currentTimeMillis() - 300000)) {
                i18n_Resources = JSONObject.fromObject(Sysc_I18n.get(module_ID).get(0));
            } else {
                // 获取数据源
                JdbcTemplate jt = new JdbcTemplate(eliteBean.getDataSource());

                String getParamSQL = "Select Resources From Sysc_I18n Where Module_Id = ?";
                List<Map<String, Object>> getParamList = jt.queryForList(getParamSQL, module_ID);
                log.debug("DB获取系统多语言结果List:" + getParamList.toString());

                if (getParamList.size() > 0) {
                    Map<String, Object> getParamMap = getParamList.get(0);
                    String Resources = getParamMap.get("Resources").toString();

                    // 将数据存储缓存
                    List<String> mapValue = new ArrayList<>();
                    mapValue.add(Resources);
                    mapValue.add(String.valueOf(System.currentTimeMillis()));
                    Sysc_I18n.put(module_ID, mapValue);

                    // 将数据放入待使用
                    i18n_Resources = JSONObject.fromObject(Resources);
                }
            }

            if (!i18n_Resources.isNullObject() && !i18n_Resources.isEmpty()) {
                JSONObject lang_Resources = i18n_Resources.getJSONObject(i18n_Type);
                i18n_Value = lang_Resources.getString(i18n_Key);

                i18n_Value = KHUtil.isNull(i18n_Value) ? "." + i18n_Key : i18n_Value;
                log.warn("获取[i18n] module_ID:" + module_ID + " i18n_Type:" + i18n_Type + " i18n_Key:" + i18n_Key + " i18n_Value:" + i18n_Value);

            } else {
                log.warn("获取[i18n] module_ID:" + module_ID + " i18n_Type:" + i18n_Type + " i18n_Key:" + i18n_Key + " 无数据");
            }
        } catch (Exception e) {
            log.error("获取[i18n] module_ID:" + module_ID + " i18n_Type:" + i18n_Type + " i18n_Key:" + i18n_Key + " 异常", e);
        }
        return i18n_Value;
    }

}
